# -*- coding: utf-8 -*-

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from lxml import etree
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
from fake_useragent import UserAgent
import csv
from pymongo import MongoClient


"""
国家药品管理监督局-数据查询-药品生产企业
http://qy1.sfda.gov.cn/datasearchcnda/face3/base.jsp?tableId=34&tableName=TABLE34&title=%D2%A9%C6%B7%C9%FA%B2%FA%C6%F3%D2%B5&bcId=152911762991938722993241728138
"""

# 初始化
def init_driver(url):
    firefox_options = Options()
    # fire_options.add_argument('--headless') # 无头模式
    firefox_options.add_argument('--disable-gpu')
    firefox_options.set_preference("general.useragent.override", 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36')  # 修改请求头，伪装浏览器型号
    # driver = webdriver.Chrome(chrome_options=chrome_options) # 已经设置PATH环境变量
    # 未在PATH环境变量中设置，需要设置驱动可执行路径
    driver = webdriver.Firefox(executable_path='D:\\webdriver\\geckodriver.exe', options=firefox_options)
    driver.maximize_window()  # 浏览器最大化
    driver.get(url)
    return driver


# 获取页面url
def get_url(drive):
    # 设置等待
    wait = WebDriverWait(driver, 10)

    # WebDriverWait(driver, 10).until(
    #         EC.presence_of_element_located((By.XPATH, '//a[contains(text(),"下一页")]')))
    while True:
        page = 1
        time.sleep(1)
        line = 0
        html = etree.HTML(driver.page_source)
        for t in html.xpath('//tbody/tr/td[@height="30"]/p/a'):
            while True:
                try:
                    element = driver.find_elements_by_xpath('//tbody/tr/td[@height="30"]/p/a')[line]
                    break
                except:
                    time.sleep(1)
                    # driver.refresh()
            element.click()
            html1 = etree.HTML(driver.page_source)
            time.sleep(1)
            dict_data = dict()
            # 药品生产企业
            dict_data['nh'] = "".join(html1.xpath('//tr[2]/td[2]//text()'))  # 编号
            dict_data['code'] = "".join(html1.xpath('//tr[3]/td[2]//text()'))  # 社会信用代码/组织机构代码
            dict_data['code'] = dict_data['code'] + "\t"  # 社会信用代码/组织机构代码
            dict_data['flm'] = "".join(html1.xpath('//tr[4]/td[2]//text()'))  # 分类码
            dict_data['sf'] = "".join(html1.xpath('//tr[5]/td[2]//text()'))  # 省份
            dict_data['name'] = "".join(html1.xpath('//tr[6]/td[2]//text()'))  # 企业名称
            dict_data['fr'] = "".join(html1.xpath('//tr[7]/td[2]//text()'))  # 法定代表人
            dict_data['fzr'] = "".join(html1.xpath('//tr[8]/td[2]//text()'))  # 企业负责人
            dict_data['zl_fzr'] = "".join(html1.xpath('//tr[9]/td[2]//text()'))  # 质量负责人
            dict_data['add'] = "".join(html1.xpath('//tr[10]/td[2]//text()'))  # 注册地址
            dict_data['sc_add'] = "".join(html1.xpath('//tr[11]/td[2]//text()'))  # 生产地址
            dict_data['fw'] = "".join(html1.xpath('//tr[12]/td[2]//text()'))  # 生产范围
            dict_data['fz_rq'] = "".join(html1.xpath('//tr[13]/td[2]//text()'))  # 发证日期
            dict_data['yxq'] = "".join(html1.xpath('//tr[14]/td[2]//text()'))  # 有效期至
            dict_data['fzjg'] = "".join(html1.xpath('//tr[15]/td[2]//text()'))  # 发证机关
            dict_data['qfr'] = "".join(html1.xpath('//tr[16]/td[2]//text()'))  # 签发人
            dict_data['jg'] = "".join(html1.xpath('//tr[17]/td[2]//text()'))  # 日常监管机构
            dict_data['gly'] = "".join(html1.xpath('//tr[18]/td[2]//text()'))  # 日常监管人员
            dict_data['dh'] = "".join(html1.xpath('//tr[19]/td[2]//text()'))  # 监督举报电话
            dict_data['bz'] = "".join(html1.xpath('//tr[20]/td[2]//text()'))  # 备注
            # 医疗器械生产企业（许可）
            # dict_data['nh'] = "".join(html.xpath('//tr[2]/td[2]//text()'))  # 许可证编号
            # dict_data['name'] = "".join(html.xpath('//tr[3]/td[2]//text()'))  # 企业名称
            # dict_data['fr'] = "".join(html.xpath('//tr[4]/td[2]//text()'))  # 法定代表人
            # dict_data['fzr'] = "".join(html.xpath('//tr[5]/td[2]//text()'))  # 企业负责人
            # dict_data['add'] = "".join(html.xpath('//tr[6]/td[2]//text()'))  # 住所
            # dict_data['add1'] = "".join(html.xpath('//tr[7]/td[2]//text()'))  # 生产地址
            # dict_data['fw'] = "".join(html.xpath('//tr[8]/td[2]//text()'))  # 生产范围(2002分类)
            # dict_data['fw1'] = "".join(html.xpath('//tr[9]/td[2]//text()'))  # 生产范围(2017分类)
            # dict_data['fz'] = "".join(html.xpath('//tr[10]/td[2]//text()'))  # 发证部门
            # dict_data['fz_rq'] = "".join(html.xpath('//tr[11]/td[2]//text()'))  # 发证日期
            # dict_data['yxq'] = "".join(html.xpath('//tr[12]/td[2]//text()'))  # 有效期限
            # dict_data['djb'] = "".join(html.xpath('//tr[13]/td[2]//text()'))  # 生产产品登记表
            # dict_data['z'] = "".join(html.xpath('//tr[15]/td[2]//text()'))  # 注

            line += 1
            print("=================")
            print(str(dict_data))
            driver.find_element_by_xpath('//td[@style="cursor:pointer"]/img').click()
            time.sleep(1)

        page += 1
        # 点击下一页
        driver.find_element_by_id("goInt").send_keys(page)
        time.sleep(1)
        driver.find_element_by_xpath('//input[@type="image"]').click()

        # driver.find_element_by_xpath('//img[contains(@src,"images/dataanniu_07.gif")]').click()
        # 点击下一页

        print(f"============第【{page}】页=============")




def close_driver(driver):
    driver.quit()



if __name__ == '__main__':
    # with open("data.csv", 'a+', encoding="utf-8-sig", newline='') as f:
    #     csv_writer = csv.writer(f)
    #     #
    #     csv_writer.writerow(["编号", "社会信用代码/组织机构代码", "分类码", "省份", "企业名称", "法定代表人", "企业负责人",
    #                          "质量负责人", "注册地址", "生产地址", "生产范围", "发证日期", "有效期至", "发证机关", "签发人",
    #                          "日常监管机构", "日常监管人员", "监督举报电话", "备注"])
    #     #
    #     # csv_writer.writerow(["许可证编号", "企业名称", "法定代表人", "企业负责人", "住所", "生产地址", "生产范围(2002分类)",
    #     #                      "生产范围(2017分类)", "发证部门", "发证日期", "有效期限", "生产产品登记表", "注	"])
    url = "http://www.nmpa.gov.cn/"
    driver = init_driver(url)
    get_url(driver)
